From f1b50baba1c7deca4edb197032f3ade5c84dd353 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 26 Jul 2021 02:35:09 +0200 Subject: [PATCH] widget-factory: Add images that support dnd Just use the bottom left notebook for a GtkPicture with custom drag source and drop target. --- demos/widget-factory/widget-factory.c | 33 ++++++++++++++++ demos/widget-factory/widget-factory.ui | 54 ++++++++++++++++++++++---- 2 files changed, 79 insertions(+), 8 deletions(-) diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c index 8d62b89b0a..0c4b21c81c 100644 --- a/demos/widget-factory/widget-factory.c +++ b/demos/widget-factory/widget-factory.c @@ -696,6 +696,37 @@ on_range_to_changed (GtkSpinButton *to) gtk_spin_button_set_value (from, v2); } +static GdkContentProvider * +on_picture_drag_prepare (GtkDragSource *source, + double x, + double y, + gpointer unused) +{ + GtkWidget *picture; + + picture = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (source)); + + return gdk_content_provider_new_typed (GDK_TYPE_TEXTURE, gtk_picture_get_paintable (GTK_PICTURE (picture))); +} + +static gboolean +on_picture_drop (GtkDropTarget *dest, + const GValue *value, + double x, + double y, + gpointer unused) +{ + GtkWidget *picture; + GdkPaintable *paintable; + + picture = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (dest)); + paintable = g_value_get_object (value); + + gtk_picture_set_paintable (GTK_PICTURE (picture), paintable); + + return TRUE; +} + static void info_bar_response (GtkWidget *infobar, int response_id) { @@ -2040,6 +2071,8 @@ activate (GApplication *app) "on_page_combo_changed", (GCallback)on_page_combo_changed, "on_range_from_changed", (GCallback)on_range_from_changed, "on_range_to_changed", (GCallback)on_range_to_changed, + "on_picture_drag_prepare", (GCallback)on_picture_drag_prepare, + "on_picture_drop", (GCallback)on_picture_drop, "tab_close_cb", (GCallback)tab_close_cb, "increase_icon_size", (GCallback)increase_icon_size, "decrease_icon_size", (GCallback)decrease_icon_size, diff --git a/demos/widget-factory/widget-factory.ui b/demos/widget-factory/widget-factory.ui index c37ade2945..94126edb36 100644 --- a/demos/widget-factory/widget-factory.ui +++ b/demos/widget-factory/widget-factory.ui @@ -1251,8 +1251,21 @@ Suspendisse feugiat quam quis dolor accumsan cursus. - - vertical + + resource:///org/gtk/WidgetFactory4/sunset.jpg + + + copy + + + + + + copy + GdkTexture + + + @@ -1265,8 +1278,21 @@ Suspendisse feugiat quam quis dolor accumsan cursus. - - vertical + + resource:///org/gtk/WidgetFactory4/nyc.jpg + + + copy + + + + + + copy + GdkTexture + + + @@ -1278,10 +1304,22 @@ Suspendisse feugiat quam quis dolor accumsan cursus. - 2 - - vertical + + resource:///org/gtk/WidgetFactory4/beach.jpg + + + copy + + + + + + copy + GdkTexture + + + @@ -1299,7 +1337,7 @@ Suspendisse feugiat quam quis dolor accumsan cursus. - + vertical -- 2.30.2